package com.tanhua.server.service;

import com.tanhua.domain.db.Question;
import com.tanhua.domain.db.Settings;
import com.tanhua.domain.db.UserInfo;
import com.tanhua.domain.vo.PageResult;
import com.tanhua.domain.vo.SettingsVo;
import com.tanhua.dubbo.api.BlackListApi;
import com.tanhua.dubbo.api.QuestionApi;
import com.tanhua.dubbo.api.SettingsApi;
import com.tanhua.dubbo.api.UserApi;
import com.tanhua.server.interceptor.UserHolder;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

/**
 * 通用设置业务处理类
 */
@Service
public class SettingsService {


    @Reference
    private SettingsApi settingsApi;

    @Reference
    private QuestionApi questionApi;

    @Reference
    private BlackListApi blackListApi;

    /**
     * 查询通用设置
     */
    public SettingsVo querySettings() {
        SettingsVo vo = new SettingsVo();
        Long userId = UserHolder.getUserId();
        //a.根据userId获取手机号码
        String phone = UserHolder.getUser().getMobile();
        vo.setPhone(phone);
        //b.根据用户id获取设置编码、推送喜欢、评论、公告通知
        Settings settings = settingsApi.findByUserId(userId);
        if (settings == null) {
            vo.setLikeNotification(false);//推送喜欢通知 true false : 1 0
            vo.setPinglunNotification(false);//推送评论通知
            vo.setGonggaoNotification(false);//推送公告通知
        } else {
            BeanUtils.copyProperties(settings, vo);
        }
        //c.根据用户id获取问题内容
        Question question = questionApi.findByUserId(userId);
        if (question == null) {
            vo.setStrangerQuestion("我帅吗?");
        } else {
            vo.setStrangerQuestion(question.getTxt());
        }
        //d.返回VO
        return vo;
    }

    /**
     * 通知设置-修改是否通知
     */
    public void updateNotification(boolean likeNotification, boolean pinglunNotification, boolean gonggaoNotification) {
        Long userId = UserHolder.getUserId();
        //1.先根据userId查询通知设置表;
        Settings settings = settingsApi.findByUserId(userId);
        //2.记录已经存在 则更新
        if(settings != null){
            settingsApi.updateNotification(likeNotification,pinglunNotification,gonggaoNotification,userId);
        }else {
            //3.记录不存在 则保存
            settingsApi.save(likeNotification,pinglunNotification,gonggaoNotification,userId);
        }

    }

    /**
     * 黑名单 - 翻页列表
     */
    public PageResult<UserInfo> queryBlackList(int page,int pagesize) {
        //方式一：（了解）
        //a.根据用户id查询黑名单列表 得到黑名单用户ids
        //b.根据得到黑名单用户ids 分页查询userInfo表 得到userInfo对象
        //c.将分页的结果 与 用户信息 放入PageResult对象中

        //方式二：（掌握）
        //a.根据用户id查询userInfo 与 黑名单表关联查询 得到PageResult
        PageResult<UserInfo> pageResult = blackListApi.queryBlackList(page,pagesize,UserHolder.getUserId());
        //b.直接返回PageResult
        return pageResult;
    }

    /**
     * 黑名单 - 移除黑名单用户
     */
    public void deleteBlackUser(Long blackUserId) {
        // a.根据 uid:用户id(黑名单用户id)   以及 当前登录用户id 移除当前黑名单用户
        blackListApi.deleteBlackUser(blackUserId,UserHolder.getUserId());
    }

    /**
     * 陌生人问题修改
     */
    public void updateQuestions(String content) {
        Long userId = UserHolder.getUserId();
        //a.根据当前登录用户id查询问题表
        Question question = questionApi.findByUserId(userId);
        //b.如果问题记录存在，则修改
        if(question != null){
            question.setTxt(content);//修改问题内容
            questionApi.updateQuestions(question);
        }
        else {
            //c.如果问题记录不存在，则保存
            question = new Question();
            question.setTxt(content);
            question.setUserId(userId);
            questionApi.save(question);
        }

    }
}
